package com.sevenGroup.pawnshop.Utils;

import com.sevenGroup.pawnshop.controller.info.FunctionInfo;
import com.sevenGroup.pawnshop.model.Function;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 *  此工具可以将菜单转换成前端需要的格式
 * </p>
 *
 * @author sevenGroup
 * @since 2022-02-16
 */
public class ChangeToFunctionInfo {
    public static List<FunctionInfo> copyList(List<Function> functions){
//        准备新的空集合
        ArrayList<FunctionInfo> functionInfos = new ArrayList<>();
//        第一次遍历集合，找到所有父节点
        for (Function function : functions) {
//            如果是父节点，直接放入新集合
            if (function.getFunctionIsleaf()==0) {
//                转换并放入新集合
                functionInfos.add(CopyProperties.copyOne(function,FunctionInfo.class));
            }
        }
//        第二次遍历集合，所有子节点去寻找父亲
        for (Function function : functions) {
//            遍历新集合，子节点的父节点如果与新集合里节点的ID相同，则加入到该节点的List属性中
            for (FunctionInfo functionInfo : functionInfos) {
                if (functionInfo.getFunctionId()==function.getFunctionLeafId()){
//                    加入前，需要先判断是否为空
                    if (null==functionInfo.getFunctionInfos()){
//                        如果为空，新建集合,并把元素add进去
                        ArrayList<FunctionInfo> childrenFunctionInfos = new ArrayList<>();
//                        放入前需要转换
                        childrenFunctionInfos.add(CopyProperties.copyOne(function,FunctionInfo.class));
                        functionInfo.setFunctionInfos(childrenFunctionInfos);
                    }else {
//                        如果后代集合不为空,先取出来
                        List<FunctionInfo> childrenFunctionInfos = functionInfo.getFunctionInfos();
//                        放入前先转换
                        childrenFunctionInfos.add(CopyProperties.copyOne(function,FunctionInfo.class));
//                        设置回去
                        functionInfo.setFunctionInfos(childrenFunctionInfos);
                    }
                }
            }
        }


        return functionInfos;
    }
}
